package com.ruoyi.basebill.service.impl;

import java.math.BigDecimal;
import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.basebill.DTO.NzjclEntryInfo;
import com.ruoyi.basebill.DTO.NzjclInfo;
import com.ruoyi.basebill.domain.WfzNzjjt;
import com.ruoyi.basebill.domain.WfzNzjjtentry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.basebill.domain.WfzNzjffentry;
import com.ruoyi.basebill.mapper.WfzNzjffMapper;
import com.ruoyi.basebill.domain.WfzNzjff;
import com.ruoyi.basebill.service.IWfzNzjffService;

/**
 * 年终奖发放Service业务层处理
 * 
 * @author xiefeng
 * @date 2022-12-13
 */
@Service
public class WfzNzjffServiceImpl implements IWfzNzjffService 
{
    @Autowired
    private WfzNzjffMapper wfzNzjffMapper;

    /**
     * 查询年终奖发放
     * 
     * @param fid 年终奖发放主键
     * @return 年终奖发放
     */
    @Override
    public WfzNzjff selectWfzNzjffByFid(Long fid)
    {
        return wfzNzjffMapper.selectWfzNzjffByFid(fid);
    }

    /**
     * 查询年终奖发放列表
     * 
     * @param wfzNzjff 年终奖发放
     * @return 年终奖发放
     */
    @Override
    public List<WfzNzjff> selectWfzNzjffList(WfzNzjff wfzNzjff)
    {
        return wfzNzjffMapper.selectWfzNzjffList(wfzNzjff);
    }

    /**
     * 新增年终奖发放
     * 
     * @param wfzNzjff 年终奖发放
     * @return 结果
     */
    @Transactional
    @Override
    public int insertWfzNzjff(WfzNzjff wfzNzjff)
    {
        int rows = wfzNzjffMapper.insertWfzNzjff(wfzNzjff);
        insertWfzNzjffentry(wfzNzjff);
        return rows;
    }

    /**
     * 修改年终奖发放
     * 
     * @param wfzNzjff 年终奖发放
     * @return 结果
     */
    @Transactional
    @Override
    public int updateWfzNzjff(WfzNzjff wfzNzjff)
    {
        wfzNzjffMapper.deleteWfzNzjffentryByFparentid(wfzNzjff.getFid());
        insertWfzNzjffentry(wfzNzjff);
        return wfzNzjffMapper.updateWfzNzjff(wfzNzjff);
    }

    /**
     * 批量删除年终奖发放
     * 
     * @param fids 需要删除的年终奖发放主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzNzjffByFids(Long[] fids)
    {
        wfzNzjffMapper.deleteWfzNzjffentryByFparentids(fids);
        return wfzNzjffMapper.deleteWfzNzjffByFids(fids);
    }

    /**
     * 删除年终奖发放信息
     * 
     * @param fid 年终奖发放主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzNzjffByFid(Long fid)
    {
        wfzNzjffMapper.deleteWfzNzjffentryByFparentid(fid);
        return wfzNzjffMapper.deleteWfzNzjffByFid(fid);
    }

    @Override
    public String importNzjff(WfzNzjff wfzNzjff) {
        NzjclInfo nzjffInfo = new NzjclInfo();
        String fnumber = wfzNzjff.getFnumber(); //单据编码
        String fcompany = wfzNzjff.getFcompany(); //公司
        String fperiod = wfzNzjff.getFperiod();//薪酬期间
        BigDecimal fzrs = wfzNzjff.getFzrs();//总人数
        BigDecimal fnscbzxrs = wfzNzjff.getFnscbzxrs();//合并纳税成本中心人数
        BigDecimal fglf = wfzNzjff.getFglf();//关联方人数
        String fvourtype = wfzNzjff.getFvourtype(); //凭证字


        nzjffInfo.setNumber(fnumber);
        nzjffInfo.setCompany(fcompany);
        nzjffInfo.setPeriod(fperiod);
        nzjffInfo.setZrs(fzrs);
        nzjffInfo.setNscbzxrs(fnscbzxrs);
        nzjffInfo.setGlf(fglf);
        nzjffInfo.setVourType(fvourtype);
        nzjffInfo.setSourcebillid(String.valueOf(wfzNzjff.getFid()));

        List<WfzNzjffentry> wfzNzjffentryList = wfzNzjff.getWfzNzjffentryList();
        ArrayList<NzjclEntryInfo> entry = new ArrayList<>();
        //组装分录数据
        for (int j=0;j<wfzNzjffentryList.size();j++){
            WfzNzjffentry wfzNzjffentry = wfzNzjffentryList.get(j);
            String fcostnumber = wfzNzjffentry.getFcostnumber();//成本中心
            BigDecimal fnzj = wfzNzjffentry.getFnzj();//年终奖
            String fcostcompany = wfzNzjffentry.getFcostcompany();//成本中心所属财务组织
            String fjzcompany = wfzNzjffentry.getFjzcompany();//记账公司
            String fjsfs = wfzNzjffentry.getFjsfs();//组织间结算方式
            String fcbzxxz = wfzNzjffentry.getFcbzxxz();//成本中心属性
            String fvourtype1 = wfzNzjffentry.getFvourtype();//凭证字


            NzjclEntryInfo nzjffEntryInfo = new NzjclEntryInfo();
            nzjffEntryInfo.setCostCenter(fcostnumber);
            nzjffEntryInfo.setNzj(fnzj);
            nzjffEntryInfo.setCostcompany(fcostcompany);
            nzjffEntryInfo.setJzcompany(fjzcompany);
            nzjffEntryInfo.setJsfs(fjsfs);
            nzjffEntryInfo.setCbzxxz(fcbzxxz);
            nzjffEntryInfo.setVourType(fvourtype1);


            entry.add(nzjffEntryInfo);

        }

        nzjffInfo.setEntry(entry);


        //转化为json
        String json = JSONObject.toJSONString(nzjffInfo);

        return json;
    }

    /**
     * 新增年终奖发放分录信息
     * 
     * @param wfzNzjff 年终奖发放对象
     */
    public void insertWfzNzjffentry(WfzNzjff wfzNzjff)
    {
        List<WfzNzjffentry> wfzNzjffentryList = wfzNzjff.getWfzNzjffentryList();
        Long fid = wfzNzjff.getFid();
        if (StringUtils.isNotNull(wfzNzjffentryList))
        {
            List<WfzNzjffentry> list = new ArrayList<WfzNzjffentry>();
            for (WfzNzjffentry wfzNzjffentry : wfzNzjffentryList)
            {
                wfzNzjffentry.setFparentid(fid);
                list.add(wfzNzjffentry);
            }
            if (list.size() > 0)
            {
                wfzNzjffMapper.batchWfzNzjffentry(list);
            }
        }
    }
}
